// 请帮我创建一个Node.js + Express + TypeScript的用户控制器，具体要求：

// **功能需求：**
// 1. 用户登录接口 (/login)
//    - 接收：username, password
//    - 调用服务层验证用户
//    - 生成JWT token（有效期1小时）
//    - 返回：用户信息 + token

// 2. 用户注册接口 (/signup)  
//    - 接收：username, password, role
//    - 调用服务层创建用户
//    - 返回：注册结果

// **技术要求：**
// - 使用Express框架
// - TypeScript编写
// - JWT token认证
// - 统一的响应格式
// - 完整的错误处理

// **响应格式：**
// - 成功：{msg: 'ok', info: data, token: token}
// - 失败：{error: '错误信息', msg: 'error'}


import UsersService from '../../services/users.service';
import { Request, Response } from 'express';
import jsonwebtoken from 'jsonwebtoken';

// token 加密所使用的秘钥
const tokenKey = 'qwer1234';

// 定义控制器类
export class Controller {
    // 登录方法
    login(req: Request, res: Response): void {
        // 获取客户端请求携带的用户名和密码
        let username = req.body.username;
        let password = req.body.password;
        
        // 验证数据是否为空
        if (username && password) {
            // 调用服务类进行登录操作
            UsersService.login(username, password)
                .then(data => {
                    // 登录成功后，生成 token，和用户信息一起返回给客户端
                    let token = jsonwebtoken.sign(
                        {
                            role: data.role,
                            id: data.id
                        },
                        tokenKey,
                        {
                            expiresIn: 3600
                        }
                    );
                    
                    res.json({
                        msg: 'ok',
                        info: data,
                        token: token
                    });
                })
                .catch(error => {
                    res.json({
                        error: error,
                        msg: 'error'
                    });
                });
        } else {
            res.json({
                error: '请输入正确的用户名和密码',
                msg: 'error'
            });
        }
    }

    // 注册方法
    singUp(req: Request, res: Response): void {
        // 获取注册时的用户信息
        let username = req.body.username;
        let password = req.body.password;
        let role = req.body.role;
        
        // 对信息有效性进行简单验证
        if (username && password && role && (role == 'admin' || role == 'normal')) {
            // 进行注册动作
            UsersService.signUp(username, password, role)
                .then(() => {
                    res.json({
                        msg: 'ok'
                    });
                })
                .catch(error => {
                    res.json({
                        error: error,
                        msg: 'error'
                    });
                });
        } else {
            res.json({
                error: '请输入正确的用户信息',
                msg: 'error'
            });
        }
    }
}

// 导出控制器类
export default new Controller();
    